15349
16621
Ho scherzato con JSON per un po 'di tempo, semplicemente inserendolo come testo e non ha ferito nessuno (che io sappia), ma mi piacerebbe iniziare a fare le cose correttamente.
Ho visto così tanti presunti "standard" per il tipo di contenuto JSON:
application / json
applicazione / x-javascript
testo / javascript
text / x-javascript
text / x-json
Ma qual è quella corretta o la migliore? Capisco che ci siano problemi di sicurezza e supporto del browser che variano tra loro.
So che esiste una domanda simile, quale tipo MIME se JSON viene restituito da un'API REST ?, ma vorrei una risposta leggermente più mirata. 
1
2
Il prossimo
Per il testo JSON:
application / json
Il tipo di supporto MIME per il testo JSON è application / json. La codifica predefinita è UTF-8. (Fonte: RFC 4627).
Per JSONP (JavaScript eseguibile) con callback:
applicazione / javascript
Ecco alcuni post del blog che sono stati menzionati nei commenti pertinenti:
Perché non dovresti usare text / html per JSON
Internet Explorer a volte ha problemi con application / json
Un elenco piuttosto completo di Mimetypes e per cosa usarli
L'elenco ufficiale dei tipi di mime allo IANA dalla risposta di @ gnrfan di seguito
|
IANA ha registrato il tipo MIME ufficiale per JSON come application / json.
Alla domanda sul perché non text / json, Crockford sembra aver detto che JSON non è realmente JavaScript né testo e inoltre IANA era più propenso a distribuire application / * che text / *.
Più risorse:
Tipi di media
Richiesta di commenti 4627
bluesmoon: JSON ha un tipo
|
Per JSON:
Tipo di contenuto: application / json
Per JSON-P:
Tipo di contenuto: applicazione / javascript
|
Ovviamente, il tipo di supporto MIME corretto per JSON è application / json, ma è necessario capire quale tipo di dati è previsto nella tua applicazione.
Ad esempio, utilizzo Ext GWT e la risposta del server deve essere text / html ma contiene dati JSON.
Lato client, listener del modulo Ext GWT
uploadForm.getForm (). addListener (new FormListenerAdapter ()
{
@Oltrepassare
public void onActionFailed (Form form, int httpStatus, String responseText)
{
MessageBox.alert ("Errore");
}
@Oltrepassare
public void onActionComplete (Form form, int httpStatus, String responseText)
{
MessageBox.alert ("Success");
}
});
In caso di utilizzo del tipo di risposta application / json, il browser mi suggerisce di salvare il file.
Snippet di codice sorgente lato server utilizzando Spring MVC
restituisce nuovo AbstractUrlBasedView ()
{
@SuppressWarnings ("unchecked")
@Oltrepassare
protected void renderMergedOutputModel (modello mappa, richiesta HttpServletRequest,
HttpServletResponse response) genera un'eccezione
{
response.setContentType ("text / html");
response.getWriter (). write (json);
}
};
|
JSON:
La risposta è dati generati dinamicamente, in base ai parametri di query passati nell'URL.
Esempio:
{"Name": "Foo", "Id": 1234, "Rank": 7}
Tipo di contenuto: application / json
JSON-P:
JSON con imbottitura.
La risposta è costituita da dati JSON, circondati da una chiamata di funzione.
Esempio:
functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7});
Tipo di contenuto: applicazione / javascript
|
Se stai usando Ubuntu o Debian e servi file .json tramite Apache, potresti voler servire i file con il tipo di contenuto corretto. Lo faccio principalmente perché voglio utilizzare l'estensione per Firefox JSONView
Il modulo di Apache mod_mime aiuterà a farlo facilmente. Tuttavia, con Ubuntu è necessario modificare il file /etc/mime.types e aggiungere la riga
applicazione / json json
Quindi riavvia Apache:
riavvio del servizio sudo apache2
|
Se stai chiamando i servizi Web ASP.NET dal lato client, devi usare application / json affinché funzioni. Credo che questo sia lo stesso per i framework jQuery ed Ext.
|
Il tipo di contenuto corretto per JSON è application / json A MENO CHE non si utilizzi JSONP, noto anche come JSON con riempimento, che in realtà è JavaScript e quindi il tipo di contenuto giusto sarebbe application / javascript.
|
Non c'è dubbio che application / json sia il miglior tipo MIME per una risposta JSON.
Ma ho avuto qualche esperienza in cui ho dovuto usare application / x-javascript a causa di alcuni problemi di compressione. Il mio ambiente di hosting è hosting condiviso con GoDaddy. Non mi consentono di modificare le configurazioni del server. Avevo aggiunto il seguente codice al mio file web.config per la compressione delle risposte.
















Usando questo, le pagine .aspx sono state compresse con g-zip ma le risposte JSON non lo erano. Ho aggiunto

nelle sezioni dei tipi statici e dinamici. Ma questo non comprime affatto le risposte JSON.
Successivamente ho rimosso questo tipo appena aggiunto e aggiunto

in entrambe le sezioni dei tipi statici e dinamici e modificato il tipo di risposta in
.ashx (gestore asincrono) in
applicazione / x-javascript
E ora ho scoperto che le mie risposte JSON erano compresse con g-zip. Quindi personalmente consiglio di usare
applicazione / x-javascript
solo se desideri comprimere le tue risposte JSON su un ambiente di hosting condiviso. Perché nell'hosting condiviso, non consentono di modificare IISconfigurazioni.
|
Solo quando utilizzo application / json come tipo MIME ho quanto segue (a partire da novembre 2011 con le versioni più recenti di Chrome, Firefox con Firebug):
Niente più avvisi da Chrome quando il JSON viene caricato dal server.
Firebug aggiungerà una scheda alla risposta che mostra i dati JSON
formattato. Se il tipo MIME è diverso, verrà visualizzato come
"Contenuto della risposta".
|
Non tutto funziona per il tipo di contenuto application / json.
Se stai usando Ext JS form submit per caricare il file, tieni presente che la risposta del server viene analizzata dal browser per creare il documento per